#Requires AutoHotkey v2.0

; ----- 函数(复用) -----
class clipTool{
    

}

; 检查文件是否变化的函数(filePath 文件路径，fileText上次检查时的文件文本)
CheckFileChange(filePath,&fileText){
    last := fileText ; 旧值赋给临时变量
    fileText := readFile(filePath) ; 获取新值
    if(last == fileText){ ; 比较
        return 0
    }
    return 1
}





class FileTool {

    ; 写(追加)文件的函数
    write(filePath, content) {

        ; 判断文件是否存在，不存在创建文件父文件夹
        if(!FileExist(filePath)){
            DirCreate(FileTool._gPBLS(filePath))
        }

        ; 使用 FileOpen 打开文件，如果文件不存在则创建
        file := FileOpen(filePath, "a","CP0") ; "a" 表示以追加模式打开文件，如果文件不存在则创建
    
        if !file {
            return false
        }
    
        ; 写入内容到文件
        file.Write(content)
        return true
    }

    read(filePath) {

        ; 判断文件是否存在，不存在创建文件父文件夹
        if(!FileExist(filePath)){
            DirCreate(FileTool._gPBLS(filePath))
        }
    
        ; 防止函数无限递归
        static flag := 0
        if(flag > 10){
            MsgBox("未知的错误，["  filePath "]文件读写失败...")
            flag++
            return ""
        }
    
        file := ""
    
        ; 尝试以读取文件,出现异常则尝试创建文件
        try{
            file := FileOpen(filePath, "r")
        }catch {
            file := FileOpen(filePath, "w")  ; 以写入模式打开文件（创建新文件）
            file.close()
            ReadFile(filePath)
        }
        
        fileContent := file.Read()  ; 读取文件内容
        file.Close()  ; 关闭文件
        return fileContent  ; 返回文件内容
    }
    
    ; 截取最后一个反斜杠之前的字符串(Get Path Before Last Slash )
    static _gPBLS(path) {

        ; 找到最后一个反斜杠的位置
        lastSlashPos := InStr(path, "\","On",,-1)
        
        ; 截取路径中最后一个反斜杠之前的部分
        temp := SubStr(path, 1, lastSlashPos)
        
        ; 去掉 "\"
        return SubStr(temp, 1, -1)

    }
}

;----- 已经弃用的函数 -----

; 用于转义特殊字符的函数
EscapeSpecialChars(str) {
    ; 定义需要转义的特殊字符及其替换值
    specialChars := []
    replacements := []

    ; 循环遍历特殊字符数组，进行替换
    Loop specialChars.Length {
        str := StrReplace(str, specialChars[A_Index], replacements[A_Index])
    }
    Return str
}

; 写(追加)文件的函数
WriteFile(filePath, content) {
    ; 使用 FileOpen 打开文件，如果文件不存在则创建
    file := FileOpen(filePath, "a") ; "a" 表示以追加模式打开文件，如果文件不存在则创建

    if !file {
        return false
    }

    ; 写入内容到文件
    file.Write(content)
    return true
}

; 读文件的函数
ReadFile(filePath) {
    
    ; 防止函数无限递归
    static flag := 0
    if(flag > 10){
        MsgBox("未知的错误，["  filePath "]文件读写失败...")
        flag++
        return ""
    }

    file := ""

    ; 尝试以读取文件,出现异常则尝试创建文件
    try{
        file := FileOpen(filePath, "r")
    }catch {
        file := FileOpen(filePath, "w")  ; 以写入模式打开文件（创建新文件）
        file.close()
        ReadFile(filePath)
    }
    
    fileContent := file.Read()  ; 读取文件内容
    file.Close()  ; 关闭文件
    return fileContent  ; 返回文件内容
}

; 获取文件大小的辅助函数
GetFileSize(fileToCheck) {
    file := FileOpen(fileToCheck, "r")
    if !file
        return -1  ; 返回 -1 表示文件打开失败

    fileSize := file.Length
    file.Close()
    return fileSize
}